<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>



    <script>
        function fun(a, b) {
            console.log("a =" + a);
            console.log("b =" + b);
            // alert(this.name);
        }
        // call()和apply()方法，都是函数对象的方法，需要函数对象来调用
        //--  当对函数调用call()和apply()都会调用函数执行
        //     在调用call()和apply()可以将一个对象指定为第一个参数
        //      此时这个对象将会成为函数执行时的this
        // ---call()方法可以将实参在对象之后依次传递
        // ---apply()方法需要将实参封装到一个数组中统一传递
        // --this的情况
        //         1.以函数形式调用时，this永远都是window
        //         2.以方法的形式调用时，this时调用方法的对象
        //         3.以构造函数的形式调用时，this是新创建的那个对象
        //         4.使用call和apply调用时，this是指定的那个对象
        var obj = {
            name: "孙悟空",
            sayName: function() {
                alert(this.name);
            }
        };
        var obj2 = {
            name: "白骨精",
            sayName: function() {
                alert(this.name);
            }
        };
        // call()
        fun.call(obj2, 2, 3);
        // apply()
        fun.apply(obj, [5, 6]);

        fun(2, 77);
    </script>
</head>

<body>

</body>

</html>